﻿namespace LM.Servicos
{
    using LM.InterfacesFabricas.DTOs;
    using LM.InterfacesFabricas.Interfaces.Servicos;
    using LM.InterfacesFabricas.Utilidades;
    using LM.Negocio;
    using LM.Negocio.Validadores;
    using LM.Repositorios;
    using LM.Repositorios.Interfaces;
    using System.Collections.Generic;

    class ServicoDeGaragem : IServicoDeGaragem
    {
        public void Cadastre(DtoGaragem garagem)
        {
            var repositorioDeGaragem = FabricaDeRepositorios.Crie<IRepositorioDeGaragem>();
            var validadorDeGaragem = new ValidadorDeGaragem(repositorioDeGaragem);
            var garagemObjeto = ConversorDeObjetos.Copie<Garagem>(garagem);

            validadorDeGaragem.ValideCadastro(garagemObjeto);

            repositorioDeGaragem.Cadastre(garagemObjeto);
        }

        public void Atualize(DtoGaragem garagem)
        {
            var repositorioDeGaragem = FabricaDeRepositorios.Crie<IRepositorioDeGaragem>();
            var validadorDeGaragem = new ValidadorDeGaragem(repositorioDeGaragem);
            var garagemObjeto = ConversorDeObjetos.Copie<Garagem>(garagem);

            validadorDeGaragem.ValideAtualizacao(garagemObjeto);

            repositorioDeGaragem.Atualize(garagemObjeto);
        }

        public void Exclua(int codigo)
        {
            var repositorioDeGaragem = FabricaDeRepositorios.Crie<IRepositorioDeGaragem>();
            var validadorDeMarca = new ValidadorDeGaragem(repositorioDeGaragem);
            var garagemObjeto = ConversorDeObjetos.Copie<Garagem>(repositorioDeGaragem.Consulte(codigo));

            validadorDeMarca.ValideExclusao(garagemObjeto);

            repositorioDeGaragem.Exclua(garagemObjeto);
        }

        public DtoGaragem Consulte(int codigo)
        {
            var garagemObjeto = FabricaDeRepositorios.Crie<IRepositorioDeGaragem>().Consulte(codigo);

            return ConversorDeObjetos.Copie<DtoGaragem>(garagemObjeto);
        }

        public IList<DtoGaragem> ConsulteTodos()
        {
            return ConversorDeObjetos.Copie<DtoGaragem, Garagem>(FabricaDeRepositorios.Crie<IRepositorioDeGaragem>().ConsulteTodos());
        }
    }
    
}
